/**
 * Created with IntelliJ IDEA
 * Description:
 * User:恋恋
 * Date:2022-10-18
 * Time:15:36
 */
class Food{

}
class Fruit extends Food{

}
class Apple extends Food{

}
class Banana extends Food{

}
class Massage<T>{
    private T massage;//定义message
    public T getMassage(){//获得message
        return massage;
    }
    public void setMassage(T massage){//初始化message
        this.massage=massage;
    }
}
public class TestDemo5 {
    public static void fun(Massage<? extends Food> temp){//只能接收Food的本身或者子类
        System.out.println("====写入时===");
      //  temp.setMassage(new Food());
       // temp.setMassage(new Fruit());
        //temp.setMassage(new Apple());
        //temp.setMassage(new Banana());
        //写入时，全部编译异常，原因：此时的temp只能接收Food的本身或者它的子类，当temp为Food的子类时，setMassage方法（接送了Food的实例化对象），就会产生向下转型-不安全
        System.out.println("====读取时====");
        Food food=temp.getMassage();
        //Apple apple=temp.getMassage();--编译异常
        //读取时，只能以最高的父类来接收，否则会出现向下转型

    }
    public static void main(String[] args) {
        Massage<Apple> massage1=new Massage<>();
        massage1.setMassage(new Apple());
        fun(massage1);
        Massage<Banana> massage2=new Massage<>();
        massage2.setMassage(new Banana());
        fun(massage2);
        //Fruit fruit=(Fruit)massage1.getMassage();
        Massage<Food> massage3=new Massage<>();
        massage3.setMassage(new Food());
        fun(massage3);
        //手动装包
        int i=10;
        Integer i1=Integer.valueOf(i);
        Integer i2=new Integer(i);
        //自动装包
        Integer i3=i;
        Integer i4=(Integer)i;
        //手动拆包
        Integer j=20;
        int j1=j.intValue();
        //自动拆包
        int j2=j;
        int j3=(int)j;


    }


    }

